home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / dos / fs / free.1 < prev    next >
Encoding:
Text File  |  1989-03-15  |  12.4 KB  |  319 lines

  1. Path: wugate!wucs1!uunet!husc6!mailrus!ulowell!page
  2. From: page@swan.ulowell.edu (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i047:  free - print disk free space
  5. Message-ID: <12222@swan.ulowell.edu>
  6. Date: 15 Mar 89 15:42:13 GMT
  7. Organization: University of Lowell, Computer Science Dept.
  8. Lines: 308
  9. Approved: page@swan.ulowell.edu
  10.  
  11. Submitted-by: well!sirius (Mike Stilson)
  12. Posting-number: Volume 89, Issue 47
  13. Archive-name: dos/fs/free.1
  14.  
  15. [Shows how much free space is left on your disk/s, like info.
  16. uuencoded executable enclosed.  ..Bob]
  17.  
  18. #    This is a shell archive.
  19. #    Remove everything above and including the cut line.
  20. #    Then run the rest of the file through sh.
  21. #----cut here-----cut here-----cut here-----cut here----#
  22. #!/bin/sh
  23. # shar:    Shell Archiver
  24. #    Run the following text with /bin/sh to create:
  25. #    readme
  26. #    makefile
  27. #    Free.c
  28. #    Free.uu
  29. # This archive created: Wed Mar 15 10:39:03 1989
  30. cat << \SHAR_EOF > readme
  31. Free    (c) 1989  Mike 'Sirius' Stilson  -  Sirius Software
  32.  
  33. Purpose of this program:
  34. I needed to know how much space was left on my disks.  I wanted it in terms
  35. of Bytes, not blocks.  And telling me x% free (ala Info) didn't help much.
  36.  
  37. Usage:
  38.                     Free [Devices]
  39.  
  40. If no argument is given, free gives info about the volume containing the
  41. current directory.
  42.  
  43. The output is of the format:
  44.     Volume Name:                Bytes Per Block:
  45.     Total bytes:                Free Bytes:
  46.     Total blocks:                Free Blocks:
  47.  
  48. Free can handle a list of devices. (Sorry.. no wildcards yet.)
  49. such as:
  50.     Free Dh1: Dh2: Df0:
  51.  
  52.  
  53. Hope you enjoy it, and let me know of any problems.
  54.  
  55.  
  56.  
  57. This compiles under Manx 3.6a   Makefile is included.
  58.  
  59.  
  60.  
  61. Mike 'Sirius' Stilson   -   Sirius Software
  62. uucp: sirius@well.UUCP
  63.   or: ...portal!cup.portal.com!sirius
  64. SHAR_EOF
  65. cat << \SHAR_EOF > makefile
  66. CFLAGS=
  67. LFLAGS=
  68.  
  69. all: Free.o
  70.    ln $(LFLAGS) Free.o -lc
  71. SHAR_EOF
  72. cat << \SHAR_EOF > Free.c
  73. /*   Free.c  -  (c) 1989  Mike 'Sirius' Stilson - Sirius Software
  74.  *   Ver1.0    January 1989.  Written, Tested, Debugged, Re-Tested, and Finished.
  75.  *
  76.  *            Display free/total bytes for a volume.
  77.  *        
  78.  *    Notice:
  79.  *        The author makes no claims or guarantees of the suitability of this
  80.  * program for any given application, and I assume no responsibility or
  81.  * liability for damages incurred through its usage.
  82.  *
  83.  *    Feel free to steal any or all of this code and make millions of dollars
  84.  * from its sale and commercial use, but please..  Give credit where credit is
  85.  * due.
  86.  *
  87.  *   Any similarity of this program, living, dead, deleted, or undead is purely
  88.  * coincidental and unintentional.
  89.  *
  90.  */
  91.  
  92. #include <exec/types.h>
  93. #include <exec/memory.h>
  94. #include <libraries/dos.h>
  95. #include <libraries/dosextens.h>
  96. #include <functions.h>
  97.  
  98. struct InfoData *idata = NULL;
  99. struct FileLock *mylock = NULL;
  100.  
  101. _wb_parse() {}        /* We don't run from the wb.. */
  102.  
  103. main(ac,av) int ac; char **av;
  104. {
  105.     char *GetName();
  106.  
  107.    if(!(idata=(struct InfoData *)
  108.         AllocMem((long)sizeof(struct InfoData),(long)MEMF_CHIP|MEMF_CLEAR))) {
  109.         puts("Not enough memory.\n");
  110.         exit(20);
  111.     }
  112.  
  113. if(ac==1) goto once;
  114.     while(--ac > 0) {
  115. once:
  116.    if(!(mylock=Lock(*++av,ACCESS_READ))) {
  117.         printf("Attempt to lock %s failed.\n",*av);
  118.       FreeMem(idata,(long)sizeof(struct InfoData));
  119.       exit(20);
  120.    }
  121.  
  122.    if(!(Info(mylock,idata))) {
  123.         printf(Output(),"Unable to obtain info for device %s.\n",*av);
  124.       FreeMem(idata,(long)sizeof(struct InfoData));
  125.         UnLock(mylock);
  126.       exit(20);
  127.    }
  128.  
  129.    printf("Volume Name: \2334;31;40m%s\2330;0;0m\t",GetName(mylock));
  130.  
  131.     GetFree();
  132.    UnLock(mylock);
  133.     }
  134.  
  135.    FreeMem(idata,(long)sizeof(struct InfoData));
  136.    exit(0);
  137. }
  138.  
  139.  
  140. /* Macro to convert a BPTR to a CString.  Just for readability */
  141. #define BPTR_TO_C(cast, var) ((struct cast *)(BADDR((ULONG)var)))
  142.  
  143. char *
  144. GetName(lock)
  145. struct FileLock *lock;
  146. {
  147.     struct DeviceList *dl=NULL;
  148.     register char *p=NULL;
  149.     register char buf[80];
  150.  
  151.     Forbid();
  152.  
  153. /* Since the InfoData structure points to a NULL BSTR all the time, this is
  154.    the only way I can think to get the volume name */
  155.  
  156.         lock = BPTR_TO_C(FileLock, lock);
  157.         dl = BPTR_TO_C(DeviceList, lock->fl_Volume);
  158.         p = (char *)BADDR(dl->dl_Name);
  159.         movmem(p+1, buf, p[0]);
  160.         buf[p[0]] = '\0';
  161.  
  162.     Permit();
  163.     return(buf);
  164. }
  165.  
  166.  
  167. GetFree()
  168. {
  169.     register ULONG usedbytes=0, totalbytes=0, freebytes=0, bpb=0;
  170.  
  171.     bpb=idata->id_BytesPerBlock;
  172.     usedbytes=bpb * idata->id_NumBlocksUsed;
  173.     totalbytes=bpb * idata->id_NumBlocks;
  174.     freebytes=totalbytes-usedbytes;
  175.     printf("Bytes per block: %-7ld\n",bpb);
  176.     printf("Total bytes: %-7ld\t\tFree Bytes: %-7ld\n",totalbytes,freebytes);
  177.     printf("Total blocks: %-7ld\t\tFree Blocks: %-7ld\n\n",idata->id_NumBlocks,
  178.         (idata->id_NumBlocks - idata->id_NumBlocksUsed));
  179. }
  180. SHAR_EOF
  181. cat << \SHAR_EOF > Free.uu
  182.  
  183. begin 644 Free
  184. M```#\P`````````#``````````(```31````JP````$```/I```$T4[Z`U!.F
  185. M50``3EU.=4Y5``!(>``"2'@`)$ZZ$K!03RE`@`)F%$AZ`/9.N@+N6$\_/``4`
  186. M3KH05%1/#&T``0`(9PQ3;0`(2FT`"&\``+@_//_^6*T`"B!M``HO$$ZZ$@!<%
  187. M3RE`@`9F*"!M``HO$$AZ`,).N@;*4$](>``D+RR``DZZ$G103S\\`!1.N@_^O
  188. M5$\O+(`"+RR`!DZZ$9I03TI`9CH@;0`*+Q!(>@"D3KH1T"\`3KH&BD_O``Q(;
  189. M>``D+RR``DZZ$C)03R\L@`9.NA&\6$\_/``43KH/LE1/+RR`!DZZ`+183R\`O
  190. M2'H`BDZZ!E!03TZZ`0PO+(`&3KH1CEA/8`#_0$AX`"0O+(`"3KH1Z%!/0F=.$
  191. MN@]T5$].74YU3F]T(&5N;W5G:"!M96UO<GDN"@!!='1E;7!T('1O(&QO8VL@A
  192. M)7,@9F%I;&5D+@H`56YA8FQE('1O(&]B=&%I;B!I;F9O(&9O<B!D979I8V4@O
  193. M)7,N"@!6;VQU;64@3F%M93H@FS0[,S$[-#!M)7.;,#LP.S!M"0``3E7_K"\*S
  194. M0JW__)7*3KH11B`M``CE@"M```@@;0`(("@`$.6`*T#__"!M__P@*``HY8`D.
  195. M0!`22(`_`$AM_ZP@2E*(+PA.N@$43^\`"A`22(!(P$'M_ZQ",`@`3KH1)$'M9
  196. M_ZP@""1?3EU.=4Y5``!(YP\`>`!Z`'P`?@`@;(`"+B@`%"!L@`(@*``0(@=.F
  197. MN@3V*``@;(`"("@`#"('3KH$YBH`+`6<A"\'2'H`1DZZ!/I03R\&+P5(>@!0R
  198. M3KH$[$_O``P@;(`"(FR``B`H``R0J0`0+P`@;(`"+R@`#$AZ`%%.N@3&3^\``
  199. M#$S?`/!.74YU0GET97,@<&5R(&)L;V-K.B`E+3=L9`H`5&]T86P@8GET97,ZP
  200. M("4M-VQD"0E&<F5E($)Y=&5S.B`E+3=L9`H`5&]T86P@8FQO8VMS.B`E+3=LB
  201. M9`D)1G)E92!";&]C:W,Z("4M-VQD"@H``$SO`P``!'``,"\`#+/(9@).=6,0S
  202. MT,#2P&`"$R!1R/_\3G42V%'(__Q.=4Y5```O"B1M``A*$F<@($I2BA`02(`_4
  203. M`$ZZ"'BP?/__5$]F"'#_)%].74YU8-P_/``*3KH(7E1/8.QA<$/L@F)%[()BZ
  204. MM<EF#C(\`!)K"'0`(L)1R?_\*4^"9BQX``0I3H)J2.>`@`@N``0!*6<02_H`,
  205. M"$ZN_^)@!D*G\U].<T/Z`"!.KOYH*4"";F8,+CP``X`'3J[_E&`$3KH`&E!/Y
  206. M3G5D;W,N;&EB<F%R>0!)^0``?_Y.=4Y5```O"DAY``$``#`L@E;!_``&+P!.`
  207. MN@[J*4""<E!/9A1"ITAY``$``$ZZ#JY03RYL@F9.=2!L@G)":``$(&R"<C%\6
  208. M``$`$"!L@G(Q?``!``H@;()F("R"9I"H``10@"E`@G8@;()V(+Q-04Y80J=.I
  209. MN@Z>)$!*J@"L6$]G+B\M``PO+0`(+PI.N@"N.7P``8)Z(&R"<@!H@```!"!L+
  210. M@G(`:(````I/[P`,8$)(:@!<3KH.N$AJ`%Q.N@Z"*4""?"!L@GQ*J``D4$]GA
  211. M$"!L@GPB:``D+Q%.N@UV6$\O+()\+PI.NOM4*6R"?(*`4$].N@V$(&R"<B"`0
  212. M3KH-NB!L@G(A0``&9Q9(>`/M2'H`*DZZ#9(@;()R(4``#%!/+RR"@#\L@H1.>
  213. MNOL:0F=.N@N04$\D7TY=3G4J`$Y5``!(YPPP)&T`$"!M``A*J`"L9Q@@;0`(+
  214. M("@`K.6`*``@1"`H`!#E@"9`8`0F;()8$!-(@$C`T*T`#%2`.4""AD*G,"R"P
  215. MADC`+P!.N@U\*4""B%!/9@A,WPPP3EU.=1`32(`Z`#\%($M2B"\(+RR"B$ZZU
  216. M`7XP!4C`($#1[(*(0_H!1!#99OP_+0`.+PHO+(*(3KH!.B!L@HA",%``.7P`8
  217. M`8*$,`5(P-"L@H@F0%*+)$M/[P`4$!-(@#H`L'P`(&<8NGP`"6<2NGP`#&<,K
  218. MNGP`#6<&NGP`"F8$4HM@V`P3`"!M>@P3`")F+E*+($M2BQ`02(`Z`&<>($I2R
  219. MBA"%NGP`(F80#!,`(F8$4HM@!D(J__]@`F#68#@@2U*+$!!(@#H`9R:Z?``@"
  220. M9R"Z?``)9QJZ?``,9Q2Z?``-9PZZ?``*9P@@2E**$(5@SB!*4HI"$$I%9@)36
  221. MBU)L@H1@`/]:0A)"IS`L@H120$C`Y8`O`$ZZ#%HI0(*`4$]F"$)L@H1@`/[8E
  222. M>@`F;(*(8"0P!4C`Y8`@;(*`(8L(`"!+(`A*&&;\D<!3B#`(4D!(P-?`4D6Z[
  223. M;(*$;=8P!4C`Y8`@;(*`0K`(`&``_I0@`#`\?_]@!#`O``P@;P`$2AAF_%-(<
  224. M(F\`"%-`$-E7R/_\9P)"$"`O``1.=4SO`P``!"`(,B\`#&`"$-E7R?_\9P92\
  225. M06`"0AA1R?_\3G5(YW``-`'$P"8!2$/&P$A#0D/4@TA`P,%(0$)`T(),WP`.J
  226. M3G5.50``2&T`#"\M``A(>@1@3KH`F$_O``Q.74YU3E4``$CG""`D;0`.#&T`;
  227. M!``29@@@;0`(*!!@'$IM``QO#"!M``AP`#`0*`!@"B!M``@P$$C`*`!";0`2H
  228. M2FT`#&P01&T`#$J$;`A$A#M\``$`$C(M``Q(P2`$3KH#D$'L@`I3BA2P```R-
  229. M+0`,2,$@!$ZZ`X8H`&;:2FT`$F<&4XH4O``M(`I,WP003EU.=4Y5_R)(YP@PQ
  230. M)&T`""9M``Q";?_Z*VT`$/_\($M2BQ`02(`X`&<``NZX?``E9@`"S$(M_S`[H
  231. M?``!__@[?``@__8[?"<0__0@2U*+$!!(@#@`L'P`+68.0FW_^"!+4HL0$$B`L
  232. M.`"X?``P9A`[?``P__8@2U*+$!!(@#@`N'P`*F88(&W__%2M__P[4/_R($M2O
  233. MBQ`02(`X`&`R0FW_\F`<,"W_\L'\``K01)!\`#`[0/_R($M2BQ`02(`X`#`$&
  234. M4D!![(`<"#```@``9M2X?``N9EH@2U*+$!!(@#@`L'P`*F88(&W__%2M__P[L
  235. M4/_T($M2BQ`02(`X`&`R0FW_]&`<,"W_],'\``K01)!\`#`[0/_T($M2BQ`08
  236. M2(`X`#`$4D!![(`<"#```@``9M0[?``"__"X?`!L9A(@2U*+$!!(@#@`.WP`B
  237. M!/_P8!"X?`!H9@H@2U*+$!!(@#@`,`1(P&!Z.WP`"/_N8!8[?``*_^Y@#CM\B
  238. M`!#_[F`&.WS_]O_N/RW_\$AM_S`_+?_N+RW__$ZZ_>0K0/_J,"W_\$C`T:W_Y
  239. M_$_O``Q@7"!M__Q8K?_\(E`K2?_J(`E*&6;\D\!3B3M)__!@2B!M__Q4K?_\7
  240. M.!!![?\O*TC_ZA"$8"B0O````&-GXE.`9Y*0O`````MG`/]R68!GLE6`9P#_\
  241. M<%>`9P#_<F#,0>W_,)'M_^H[2/_P,"W_\+!M__1O!CMM__3_\$IM__AG:"!MF
  242. M_^H,$``M9PH@;?_J#!``*V8N#&T`,/_V9B93;?_R(&W_ZE*M_^H0$$B`/P!.B
  243. MDK!\__]43V8*</],WPP03EU.=6`6/RW_]DZ2L'S__U1/9@1P_V#D4FW_^C`MI
  244. M__)3;?_RL&W_\&[<0FW_[F`@(&W_ZE*M_^H0$$B`/P!.DK!\__]43V8$</]@_
  245. ML%)M_^X@;?_J2A!G"C`M_^ZP;?_T;<XP+?_NT6W_^DIM__AF*&`8/SP`($Z2B
  246. ML'S__U1/9@9P_V``_WA2;?_Z,"W_\E-M__*P;?_P;MI@%C\$3I*P?/__5$]F6
  247. M!G#_8`#_4E)M__I@`/T(,"W_^F``_T)(YT@`0H1*@&H$1(!21$J!:@9$@0I$7
  248. M``%A/DI$9P)$@$S?`!)*@$YU2.=(`$*$2H!J!$2`4D1*@6H"1(%A&B`!8-@OS
  249. M`6$2(`$B'TJ`3G4O`6$&(A]*@$YU2.<P`$A!2D%F($A!-@$T`$)`2$"`PR(`D
  250. M2$`R`H+#,`%"04A!3-\`#$YU2$$F`2(`0D%(04A`0D!T#]"`TX&V@6($DH-2+
  251. M0%'*__),WP`,3G5.50``2&R`M#\M``A.N@`(7$].74YU3E4``"\$."T`""\M-
  252. M``H_!$ZZ`#"X?``*7$]F)"!M``H0*``,2(`(```'9Q0_//__+RT`"DZZ`/1<<
  253. M3R@?3EU.=6#X3E4``"\*)&T`"B!2L>H`!&48,"T`",!\`/\_`"\*3KH`R%Q/T
  254. M)%].74YU(%)2DA`M``D0@$B`P'P`_V#H3E4``"\*0>R`GB1(($K5_````!8O[
  255. M"&$06$]![()6M<AEZB1?3EU.=4Y5``!(YP@@)&T`"'@`(`IF"G#_3-\$$$Y=@
  256. M3G5**@`,9U`(*@`"``QG##\\__\O"F%2.`!<3Q`J``U(@#\`3KH%'(A`""H`F
  257. M`0`,5$]G"B\J``A.N@(N6$\(*@`%``QG$B\J`!).N@+`+RH`$DZZ`A103T*2.
  258. M0JH`!$*J``A"*@`,,`1@D$Y5__Y(YP@@)&T`"$'Z_T8I2(*,""H`!``,9PIPR
  259. M_TS?!!!.74YU""H``@`,9S`@4I'J``@X"#\$+RH`"!`J``U(@#\`3KH"@+!$H
  260. M4$]G$`CJ``0`#$*20JH`!'#_8,`,;?__``QF$`BJ``(`#$*20JH`!'``8*A*J
  261. MJ@`(9@@O"DZZ`)I83PQJ``$`$&8J&VT`#?__/SP``4AM__\0*@`-2(`_`$ZZ1
  262. M`B*P?``!4$]FH#`M``Q@`/]J)*H`"#`J`!!(P-"J``@E0``$".H``@`,(%)2?
  263. MDA`M``T0@$B`P'P`_V``_SY.50``+PI![(">)$A**@`,9QC5_````!9![()6*
  264. MM<AE"'``)%].74YU8.)"DD*J``1"J@`((`I@ZDY5__PO"B1M``@_/`0`3KH`P
  265. MP"M`__Q43V88-7P``0`0($K1_`````XE2``()%].74YU-7P$```0".H``0`,X
  266. M)6W__``($"H`#4B`/P!.N@#B2D!43V<&`"H`@``,8,Y.50``2.<`,"1L@F)@A
  267. M%"92("H`!%"`+P`O"DZZ!'I03R1+(`IFZ$*L@F),WPP`3EU.=4Y5```O"D'ZL
  268. M_\8I2(*00J<@+0`(4(`O`$ZZ!"`D0$J`4$]F"'``)%].74YU)*R"8B5M``@`;
  269. M!"E*@F(@"E"`8.9.50``<``P+0`(+P!ALEA/3EU.=4Y5``!(YP`PE\LD;()B"
  270. M8`X@;0`(48BQRF<2)DHD4B`*9NYP_TS?#`!.74YU(`MG!":28`0I4H)B("H`C
  271. M!%"`+P`O"DZZ`\QP`%!/8-A.50``+PHP+0`(P?P`!B1`U>R"<DIM``AM#C`M.
  272. M``BP;()6;`1*DF8..7P``H*4</\D7TY=3G4P+0`(P?P`!B!L@G(O,`@`3KH""
  273. MU$J`6$]G!'`!8`)P`SE4``"\M``A.N@*02H!83V8.3KH"J#E`@I1P_TY=,
  274. M3G5P`Ϥ``$CG#"`X+0`(3KH`<#`$P?P`!B1`U>R"<DI$;0JX;()6;`1*Y
  275. MDF80.7P``H*4</],WP0P3EU.=3`J``3`?``#9@HY?``%@I1P_V#D<``P+0`.\
  276. M+P`O+0`*+Q).N@***@"PO/____]/[P`,9@Q.N@(H.4""E'#_8+@@!6"T3E7_;
  277. M_$AX$`!"ITZZ`NXK0/_\"```#%!/9Q)*;()Z9@@@+?_\3EU.=4ZZ``9P`&#TG
  278. M3E4``$AX``1(>@`<3KH"%"\`3KH")C\\``%.N@`.3^\`#DY=3G5>0PH`3E4`<
  279. M`$JL@HQG!B!L@HQ.D#\M``A.N@`(5$].74YU3E7__"\$,"T`"$C`*T#__$JL8
  280. M@G)G*'@`8`H_!$ZZ`/Y43U)$N&R"5FWP,"R"5L'\``8O`"\L@G).N@(84$]*`
  281. MK(*09P8@;(*03I!*K()<9PHO+()<3KH!C%A/2JR"EF<((&R"EB"L@II*K(*>`
  282. M9PHO+(*>3KH!I%A/2JR"HF<*+RR"HDZZ`9183TJL@J9G"B\L@J9.N@&$6$]*>
  283. MK(*J9PHO+(*J3KH!=%A/+'@`!`@N``0!*6<4+PU+^@`*3J[_XBI?8`9"I_-?-
  284. M3G-*K()\9C!*K(*(9R@P+(*&2,`O`"\L@HA.N@%P,"R"A%)`2,#E@"\`+RR"`
  285. M@$ZZ`5Q/[P`08`Y.N@%&+RR"?$ZZ`6Y83R`M__PN;()F3G4H'TY=3G5.50``,
  286. M2.<.(#@M``@P!,'\``8D0-7L@G)*1&T*N&R"5FP$2I)F$#E\``*"E'#_3-\$(
  287. M<$Y=3G4(*@`'``1F""\23KH`"EA/0I)P`&#B(B\`!"QL@FY.[O_<(B\`!"QLJ
  288. M@FY.[O^"(B\`!"QL@FY.[O^X3.\`!@`$+&R";D[N_XXL;()N3N[_RBQL@FY.V
  289. M[O]\(B\`!"QL@FY.[O\H3OH``DSO``8`!"QL@FY.[O^L3.\`!@`$+&R";D[NP
  290. M_^).^@`"+&R";D[N_\1.^@`"(B\`!"QL@FY.[O^F3.\`#@`$+&R";D[N_]!(B
  291. MYP$$3.\@@``,+&R":DZN_Y1,WR"`3G4B;P`$+&R":D[N_F).^@`"3.\``P`$U
  292. M+&R":D[N_SHB;P`$+&R":D[N_MI.^@`"+&R":D[N_WQ.^@`"(F\`!"`O``@L-
  293. M;()J3N[_+B!O``0L;()J3N[^C"QL@FI.[O]V(F\`!"QL@FI.[OZ&3.\``P`$N
  294. M+&R":D[N_LX@;P`$+&R":D[N_H```````^P````!`````0```\8````````#:
  295. M\@```^H```"8```````````P,3(S-#4V-S@Y86)C9&5F````("`@("`@("`@Y
  296. M,#`P,#`@("`@("`@("`@("`@("`@(""00$!`0$!`0$!`0$!`0$!`#`P,#`P,(
  297. M#`P,#$!`0$!`0$`)"0D)"0D!`0$!`0$!`0$!`0$!`0$!`0$!`4!`0$!`0`H*.
  298. M"@H*"@("`@("`@("`@("`@("`@("`@("0$!`0"```````````````````0``Q
  299. M```!``````````````````````$!`````0`````````````````````!`@``'
  300. M``$`````````````````````````````````````````````````````````!
  301. M`````````````````````````````````````````````````````````````
  302. M`````````````````````````````````````````````````````````````
  303. M`````````````````````````````````````````````````````````````
  304. M`````````````````````````````````````````````````````````````
  305. M`````````````````````````````````````````````````````````````
  306. M`````````````````````````````````````````````````````````````
  307. M`````````````````````````````````````````````````````````````
  308. M````````````````````````````%`````````````````/R```#ZP````$`X
  309. #``/RU
  310. ``
  311. end
  312. size 5628
  313. SHAR_EOF
  314. #    End of shell archive
  315. exit 0
  316. -- 
  317. Bob Page, U of Lowell CS Dept.  page@swan.ulowell.edu  ulowell!page
  318. Have five nice days.
  319.